#一 加载 django配置环境
import os
import django
from celery import Celery
from . import celeryconfig

os.environ.setdefault("DJANGO_SETTINGS_MODULE",'taotao.settings.dev')
django.setup()

#二 加载 celery配置环境
broker = 'redis://127.0.0.1:6379/3' #broker任务队列
backend = 'redis://127.0.0.1:6379/4' #结果存储， 执行完的结果存在这

app = Celery(__name__, broker=broker, backend=backend, include=['celery_task.home_task'])
#执行定时任务
#时区
app.conf.timezone= 'Asia/Shanghai'
#是否使用 UTC
app.conf.enable_utc = False

#任务的定时配置
from datetime import timedelta
from celery.schedules import crontab
app.conf.beat_schedule = {
    'add_task':{
        'task':'celery_task.home_task.banner_update',
        'schedule':timedelta(seconds=60*60*24)
        # 'schedule': crontab(hour=8, day_of_week=1),  # 每周一早八点
        # 'args': (300, 150)  任务参数，没有参数就不需要该关键字
    }
}

#celery 配置
#有些情况可以防止死锁
CELERYD_FORCE_EXECV=True #非常重要
# 设置并发worker数量
CELERYD_CONCURRENCY=10
#允许重试
CELERY_ACKS_LATE=True
# 每个worker最多执行100个任务被销毁，可以防止内存泄漏
CELERYD_MAX_TASKS_PER_CHILD=50
# 超时时间
CELERYD_TASK_TIME_LIMIT=60 # 单个任务的运行时间不超过此值，否则会被SIGKILL 信号杀死
# 任务发出后，经过一段时间还未收到acknowledge , 就将任务重新交给其他worker执行
CELERY_DISABLE_RATE_LIMITS = True


#一定要启动beat
# celery beat -A celery_task -l info